package cn.lg.soar.system.api.utils;

import cn.lg.soar.core.util.SoarSubscriber;
import cn.lg.soar.system.api.service.ISysConfigApi;

/**
 * 系统配置工具
 * @author luguoxiang
 * @date 2025-07-15
 * 开源项目：https://gitee.com/lgx1992/lg-soar 求star！请给我star！请帮我点个star！
 */
public class SysConfigUtils {

    private static ISysConfigApi api;
    static {
        SoarSubscriber.subscribeInit(applicationContext -> {
            api = applicationContext.getBean(ISysConfigApi.class);
        });
    }


    /**
     * 获取并缓存
     * @param code
     * @return
     */
    public static String getByCache(String code) {
        return api.getByCache(code);
    }

    /**
     * 获取并缓存
     * @param code
     * @param defaultValue
     * @return
     */
    public static String getByCache(String code, String defaultValue) {
        return api.getByCache(code, defaultValue);
    }

    /**
     * 获取并缓存（缓存有效期120秒）
     * @param tClass
     * @return
     * @param <T>
     */
    public static <T>T getByCache(Class<T> tClass) {
        return api.getByCache(tClass);
    }

    /**
     * 获取并缓存（缓存有效期120秒）
     * @param tClass
     * @param defaultValue 不存在时的默认值
     * @return
     * @param <T>
     */
    public static <T>T getByCache(Class<T> tClass, T defaultValue) {
        return api.getByCache(tClass, defaultValue);
    }

    /**
     * 获取并缓存（缓存有效期120秒）
     * @param code
     * @param tClass
     * @return
     * @param <T>
     */
    public static <T>T getByCache(String code, Class<T> tClass) {
        return api.getByCache(code, tClass);
    }

    /**
     * 获取并缓存（缓存有效期120秒）
     * @param code
     * @param tClass
     * @param defaultValue 不存在时的默认值
     * @return
     * @param <T>
     */
    public static <T>T getByCache(String code, Class<T> tClass, T defaultValue) {
        return api.getByCache(code, tClass, defaultValue);
    }

    /**
     * 获取系统配置
     * @param code
     * @param tClass
     * @return
     * @param <T>
     */
    public static <T>T get(String code, Class<T> tClass) {
        return api.get(code, tClass);
    }

    /**
     * 获取系统配置（默认读取注解 @SysConfig 获取code）
     * @param tClass
     * @return
     * @param <T>
     */
    public static <T>T get(Class<T> tClass) {
        return api.get(tClass);
    }

    /**
     * 设置配置
     * @param code
     * @param value
     * @return
     */
    public static boolean set(String code, Object value) {
        return api.set(code, value);
    }

    /**
     * 设置配置（默认读取注解 @SysConfig 获取code）
     * @param value 值
     * @return
     */
    public static boolean set(Object value) {
       return api.set(value);
    }

    /**
     * 获取系统配置
     * @param code
     * @return
     */
    public static String get(String code) {
        return api.get(code);
    }

    /**
     * 设置配置
     * @param code
     * @param value
     * @return
     */
    public static boolean set(String code, String value) {
        return api.set(code, value);
    }

}
